Mastering PHP Design Patterns by Ali Junade
Author:Ali, Junade [Ali, Junade]
Language: eng
Format: azw3, epub
Publisher: Packt Publishing
Published: 2016-09-28T04:00:00+00:00
By using the Decorator design pattern, we are able to ensure that functionality is divided between classes with unique areas of concern, thus adhering to the Single Responsibility Principle.
Let's start off by declaring our Book interface. This is what we expect our Books to be able to produce:
<?php interface Book { public function __construct(string $title, string $author, string $contents); public function getTitle(): string; public function getAuthor(): string; public function getContents(): string; }
Then we can declare our EBook.php class. This is the class we will be decorating with our PrintBook class:
<?php class EBook implements Book { public $title; public $author; public $contents; public function __construct(string $title, string $author, string $contents) { $this->title = $title; $this->author = $author; $this->contents = $contents; } public function getTitle(): string { return $this->contents; } public function getAuthor(): string { return $this->author; } public function getContents(): string { return $this->contents; } }
Now we can declare our PrintBook class. This is what we're using to decorate the EBook class:
<?php class PrintBook implements Book { public $eBook; public function __construct(string $title, string $author, string $contents) { $this->eBook = new EBook($title, $author, $contents); } public function getTitle(): string { return $this->eBook->getTitle(); } public function getAuthor(): string { return $this->eBook->getAuthor(); } public function getContents(): string { return $this->eBook->getContents(); } public function getText(): string { $contents = $this->eBook->getTitle() . " by " . $this->eBook->getAuthor(); $contents .= "\n"; $contents .= $this->eBook->getContents(); return $contents; } }
So now let's test all this with our index.php file:
<?php require_once('Book.php'); require_once('EBook.php'); $PHPBook = new EBook("Mastering PHP Design Patterns", "Junade Ali", "Some contents."); require_once('PrintBook.php'); $PHPBook = new PrintBook("Mastering PHP Design Patterns", "Junade Ali", "Some contents."); echo $PHPBook->getText();
The output looks like this:
Some contents. by Junade Ali Some contents.
Download
This site does not store any files on its server. We only index and link to content provided by other sites. Please contact the content providers to delete copyright contents if any and email us, we'll remove relevant links or contents immediately.
The Mikado Method by Ola Ellnestam Daniel Brolund(20590)
Hello! Python by Anthony Briggs(19890)
Secrets of the JavaScript Ninja by John Resig Bear Bibeault(18193)
Dependency Injection in .NET by Mark Seemann(18097)
The Well-Grounded Java Developer by Benjamin J. Evans Martijn Verburg(17566)
Kotlin in Action by Dmitry Jemerov(17170)
Sass and Compass in Action by Wynn Netherland Nathan Weizenbaum Chris Eppstein Brandon Mathis(13259)
Secrets of the JavaScript Ninja by John Resig & Bear Bibeault(11379)
Jquery UI in Action : Master the concepts Of Jquery UI: A Step By Step Approach by ANMOL GOYAL(9383)
Svelte with Test-Driven Development by Daniel Irvine(8138)
Test-Driven Development with PHP 8 by Rainier Sarabia(7888)
Layered Design for Ruby on Rails Applications by Dementyev Vladimir;(7707)
Web Development with Django by Ben Shaw Saurabh Badhwar(7216)
React Application Architecture for Production by Alan Alickovic(6899)
Software Architecture for Web Developers by Mihaela Roxana Ghidersa(4980)
Audition by Ryu Murakami(4883)
Accelerating Server-Side Development with Fastify by Manuel Spigolon Maksim Sinik & Matteo Collina(4835)
Solidity Programming Essentials by Ritesh Modi(4560)
Build Your Own Web Framework in Elixir by Aditya Iyengar(4436)